﻿using TgcViewer;
using TgcViewer.Utils.TgcSceneLoader;
using TgcViewer.Utils.TgcGeometry;

namespace AlumnoEjemplos.zanellaSports
{
    public class Map
    {
        TgcScene tgcScene;

        //Constructor
        public Map()
        {
            //Version para cargar escena desde carpeta descomprimida
            TgcSceneLoader loader = new TgcSceneLoader();
            tgcScene = loader.loadSceneFromFile(
                GuiController.Instance.AlumnoEjemplosMediaDir + "zanellaSports\\mapas\\calle-TgcScene.xml",
                GuiController.Instance.AlumnoEjemplosMediaDir + "zanellaSports\\mapas\\");
            //Deshabilito los mesh que utilizo para las coliciones
            tgcScene.getMeshByName("BoxInterno").Enabled = false;
            tgcScene.getMeshByName("BoxExterior").Enabled = false;
        }

        public void render(float elapsedTime)
        {
            //Analizar cada malla contra el Frustum - con fuerza bruta
            TgcFrustum frustum = GuiController.Instance.Frustum;
            int totalMeshes = 0;
            foreach (TgcMesh mesh in tgcScene.Meshes)
            {
                //Nos ocupamos solo de las mallas habilitadas
                if (mesh.Enabled)
                {
                    //Solo mostrar la malla si colisiona contra el Frustum
                    TgcCollisionUtils.FrustumResult r = TgcCollisionUtils.classifyFrustumAABB(frustum, mesh.BoundingBox);
                    if (r != TgcCollisionUtils.FrustumResult.OUTSIDE)
                    {
                        mesh.render();
                        totalMeshes++;
                    }
                }
            }
            //Actualizar cantidad de meshes dibujadas
            //GuiController.Instance.UserVars.setValue("Meshes renderizadas", totalMeshes);
        }

        public void dispose()
        {
            tgcScene.disposeAll();
        }
    }
}